"""
存储基础模块

提供存储管理的基础功能，包括目录管理和路径验证。
"""

import os
from typing import Optional
from pathlib import Path


class StorageBase:
    """存储管理基础类"""

    def __init__(self, storage_dir: Optional[str] = None):
        """
        初始化存储基础类

        Args:
            storage_dir: 存储目录路径
        """
        self.storage_dir = storage_dir
        if self.storage_dir:
            self.ensure_directory()

    def ensure_directory(self) -> None:
        """确保存储目录存在"""
        if not os.path.exists(self.storage_dir):
            os.makedirs(self.storage_dir, exist_ok=True)
            print(f"创建存储目录: {self.storage_dir}")

    def get_storage_path(self, filename: str) -> str:
        """
        获取文件的完整存储路径

        Args:
            filename: 文件名

        Returns:
            str: 完整的文件路径
        """
        return os.path.join(self.storage_dir, filename)

    def file_exists(self, filename: str) -> bool:
        """
        检查文件是否存在

        Args:
            filename: 文件名

        Returns:
            bool: 文件是否存在
        """
        file_path = self.get_storage_path(filename)
        return os.path.exists(file_path)

    def get_file_info(self, filename: str) -> dict:
        """
        获取文件信息

        Args:
            filename: 文件名

        Returns:
            dict: 文件信息
        """
        file_path = self.get_storage_path(filename)
        if not os.path.exists(file_path):
            return {
                "exists": False,
                "size": 0,
                "modified_time": None,
                "path": file_path
            }

        stat = os.stat(file_path)
        return {
            "exists": True,
            "size": stat.st_size,
            "modified_time": stat.st_mtime,
            "path": file_path
        }

    def delete_file(self, filename: str) -> bool:
        """
        删除文件

        Args:
            filename: 文件名

        Returns:
            bool: 是否删除成功
        """
        file_path = self.get_storage_path(filename)
        try:
            if os.path.exists(file_path):
                os.remove(file_path)
                return True
            return False
        except Exception as e:
            print(f"删除文件失败: {e}")
            return False

    def list_files(self, pattern: str = "*") -> list:
        """
        列出存储目录中的文件

        Args:
            pattern: 文件名模式

        Returns:
            list: 文件列表
        """
        if not os.path.exists(self.storage_dir):
            return []

        from glob import glob
        search_pattern = os.path.join(self.storage_dir, pattern)
        return glob(search_pattern)